package com.jinhongone.pattern.creater.singleton.demo7;

import java.io.Serializable;

/*
* 懒汉模式-静态内部类方式（线程安全）[推荐]
* jvm在初始化类时不会同步初始其内部类，所以只有在调用getInstance()时才会初始静态内部类，由于是静态内部类的静态成员变量不存在线程安全问题。
* 类似如一个可控制触发时间的饿汉式单例模式
* java中内部类是视为外部类的一部分，所以在外部类可以直接访问内部类的private变量。
* */
public class Singleton implements Serializable {

    private Singleton(){};

    private static class SingleTonHander{
        private static  final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance(){
        return SingleTonHander.INSTANCE;
    }

//    解决反序列化安全问题
//    添加readResolve()方法，反序列化时会自动调用该方法，并将该方法的返回值作为反序列化对象，若没有该方法则会new一个新对象。
    public Object readResolve(){
        return SingleTonHander.INSTANCE;
    }
}
